package com.alks.function.mapper.chengKong;

import com.alks.entity.data.entity.*;
import com.alks.function.data.dto.chengKong.assort.*;
import com.alks.function.data.request.chengKong.MatterRequest;
import com.alks.function.data.request.chengKong.YfMtlTypeDetailRequest;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.mapstruct.Mapper;

import java.math.BigDecimal;
import java.util.List;

@Mapper
public interface MaterialManagementMapper {

    /**
     * 分类资料定义列表
     * @return
     */
    List<YfMtlTypeNewDto> getAssortListQuery();

    /**
     * 根据分类代码查询
     * @param typeNo
     * @return
     */
    YfMtlTypeNew getByTypeNo(@Param("typeNo") String typeNo);

    /**
     * 获取子节点
     * @param parentLevel
     * @return
     */
    List<String> getByLevelCode(@Param("parentLevel")String parentLevel);

    /**
     * 分类资料添加
     * @param mtlTypeNew
     * @return
     */
    Integer addAssortInfo(YfMtlTypeNew mtlTypeNew);

    /**
     * 查询父节点
     * @param parentLevel
     * @return
     */
    Integer getLParentLevel(@Param("parentLevel")String parentLevel);

    /**
     * 根据id删除分类资料
     * @param typeNo
     * @return
     */
    Integer delTypeById(@Param("typeNo") String typeNo);

    /**
     * 修改
     */
    void updateByTypeNo(YfMtlTypeNew yfMtlTypeNew);

    /**
     * 查询所有父节点
     * @param parentLevel
     * @return
     */
    List<YfMtlTypeNewDto> getParentLevelList(@Param("parentLevel") String parentLevel);

    /**
     * 根据主键更新排序
     * @param typeNo
     * @param oldLevel
     */
    void updateLevelCodeByTypeNo(@Param("typeNo")String typeNo,
                                 @Param("oldLevel")String oldLevel);

    /**
     * 材料属性定义列表
     * @return
     */
    List<YfMtlPropertyDto> getMaterialPropertiesDetails();

    /**
     * 获取材料属性
     * @param mtlProperty
     * @return
     */
    YfMtlProperty getMtlProperty(@Param("mtlProperty") String mtlProperty);

    /**
     * 查询材料属性序号
     * @param seqNo
     * @return
     */
    BigDecimal getSeqNo(@Param("seqNo") BigDecimal seqNo);

    /**
     *材料属性添定义添加
     * @param yfMtlProperty
     */
    int addMaterialProperties(YfMtlProperty yfMtlProperty);

    /**
     * 查询材料属性关联规格
     * @param mtlProperty
     * @return
     */
    List<YfMtlPropertyDetailDto> getMaterialPropertiesSpec(@Param("mtlProperty") String mtlProperty);

    /**
     * 材料属性定义删除
     * @param mtlProperty
     * @return
     */
    int delByMtlProperty(@Param("mtlProperty")String mtlProperty);

    /**
     * 根据编号与材料属性查找
     * @param mtlProperty
     * @param mtlSeq
     * @return
     */
    YfMtlPropertyDetail getByMtlProperty2MtlSeq(@Param("mtlProperty")String mtlProperty,@Param("mtlSeq") String mtlSeq);

    /**
     * 材料属性关联规格添加
     * @param yfMtlPropertyDetail
     * @return
     */
    int addMaterialPropertiesSpec(YfMtlPropertyDetail yfMtlPropertyDetail);

    /**
     * 材料属性关联规格修改
     * @param detail
     * @return
     */
    int updateMaterialPropertiesSpec(YfMtlPropertyDetail detail);

    /**
     * 材料属性关联规格删除
     * @param mtlProperty
     * @param mtlSpec
     */
    @Delete("delete from YF_MTL_PROPERTY_DETAIL where MTL_PROPERTY=#{mtlProperty} and MTL_SPEC=#{mtlSpec}")
    int delMaterialPropertiesSpec(@Param("mtlProperty") String mtlProperty,@Param("mtlSpec") String mtlSpec);

    /**
     * 宽幅定义列表
     * @return
     */
    List<YfMtlSpecDto> getWideDefinitionList();

    /**
     * 查询宽幅
     * @param mtlSpec
     * @return
     */
    String getWideDefinitionInfo(@Param("mtlSpec") String mtlSpec);

    /**
     * 查询编码
     * @param mtlSeq
     * @return
     */
    String getWideDefinitionCode(@Param("mtlSeq") String mtlSeq);

    /**
     * 宽幅定义添加
     * @param yfMtlSpec
     * @return
     */
    int AddWideDefinition(YfMtlSpec yfMtlSpec);

    /**
     * 宽幅定义修改
     * @param yfMtlSpec
     * @return
     */
    int UpdateWideDefinition(YfMtlSpec yfMtlSpec);

    /**
     * 宽幅定义删除
     * @param mtlUnit
     */
    @Delete("delete from YF_MTL_SPEC where MTL_SPEC=#{mtlUnit}")
    int delWideDefinition(@Param("mtlUnit") String mtlUnit);

    /**
     * 单位定义列表
     * @return
     */
    @Select("select MTL_UNIT,MTL_SEQ,ENG_MTL_UNIT,SORT_NO from YF_MTL_UNIT order by MTL_SEQ")
    List<YfMtlUnitDto> getUnitList();

    /**
     * 查询单位编码
     * @param mtlSeq
     * @return
     */
    @Select("select MTL_SEQ from YF_MTL_UNIT where MTL_SEQ=#{mtlSeq}")
    String getUnitCode(String mtlSeq);

    /**
     * 查询中文单位
     * @param mtlUnit
     * @return
     */
    @Select("select MTL_UNIT from YF_MTL_UNIT where MTL_UNIT=#{mtlUnit}")
    String getChineseUnit(String mtlUnit);

    /**
     * 单位定义添加
     * @param yfMtlUnit
     * @return
     */
    int addUnit(YfMtlUnit yfMtlUnit);

    /**
     * 单位定义修改
     * @param yfMtlUnit
     * @return
     */
    int updateUnit(YfMtlUnit yfMtlUnit);

    /**
     * 单位定义删除
     * @param mtlUnit
     */
    @Delete("delete from YF_MTL_UNIT where MTL_UNIT=#{mtlUnit}")
    int delUnit(String mtlUnit);

    /**
     * 贴合加工方式定义
     * @return
     */
    @Select("select PRD_TYPE,SEQ_NO,SORT_NO from YF_MTL_PRD_TYPE order by SEQ_NO")
    List<YfMtlPrdTypeDto> getFitList();

    /**
     * 贴合加工方式查询序号
     * @param seqNo
     * @return
     */
    @Select("select SEQ_NO from YF_MTL_PRD_TYPE where SEQ_NO=#{seqNo}")
    String getFitNo(BigDecimal seqNo);
    /**
     * 查询贴合加工方式查询
     * @param prdType
     * @return
     */
    @Select("select PRD_TYPE from YF_MTL_PRD_TYPE where PRD_TYPE=#{prdType}")
    String getFitType(String prdType);

    /**
     * 贴合加工方式定义添加
     * @param yfMtlPrdType
     * @return
     */
    int addFit(YfMtlPrdType yfMtlPrdType);

    /**
     * 贴合加工方式定义修改
     * @param yfMtlPrdType
     * @return
     */
    int updateFit(YfMtlPrdType yfMtlPrdType);

    /**
     * 贴合加工方式删除
     * @param prdType
     * @return
     */
    @Delete("delete from YF_MTL_PRD_TYPE where PRD_TYPE=#{prdType}")
    int delFit(String prdType);

    /**
     * 分类建档列表
     * @param request
     * @return
     */
    List<YfMtlTypeDetailDto> getTypeDetailList(MatterRequest request);

    /**
     * 分类建档添加
     * @param yfMtlTypeDetail
     * @return
     */
    int addTypeDetail(YfMtlTypeDetail yfMtlTypeDetail);

    /**
     * 分类建档修改
     * @param t1
     * @return
     */

    int updateTypeDetail(@Param("t1") YfMtlTypeDetail t1, @Param("t2") YfMtlTypeDetailRequest t2);

    /**
     * 分类建档删除
     * @param request
     * @return
     */
    int delTypeDetailDel(YfMtlTypeDetailRequest request);


    /**
     * 查询是否被引用
     * @param typeNo
     */
    List<YfMtlTypeDetail> getTypeNoCode(@Param("typeNo") String typeNo);

    /**
     * 查询材料属性是否存在
     * @param yfMtlTypeDetail
     * @return
     */
    String getYfMtlTypeDetail(YfMtlTypeDetail yfMtlTypeDetail);

}
